const newMessageModel = require("./schema/newMessageSchema");
const messageModel = require("./schema/messageSchema");
// 添加留言或者评论
module.exports.addMessageDao = async function (newMessage) {
  const data = await messageModel.create(newMessage);
  return data;
};

// 分页获取留言或者评论
module.exports.findMessageByPageDao = async function (pageInfo) {
  // 这里需要根据 blogId 来区分情况
  // 如果有 blogId，说明是获取对应 blogId 的文章评论，如果没有，说明是获取留言
  if (pageInfo.blogid) {
    // 这边又分为两种情况，获取所有的文章评论，还有一种就是获取对应文章的评论
    if (pageInfo.blogid === "all") {
      // 返回所有评论
      const total = await messageModel.countDocuments({
        blogId: { $ne: null },
      });
      const rows = await messageModel
        .find({ blogId: { $ne: null } })
        .skip((pageInfo.page - 1) * pageInfo.limit)
        .limit(pageInfo.limit)
        .populate("blogId", "id title");
      return {
        rows,
        total,
      };
    } else {
      // 返回对应文章的评论
      const total = await messageModel.countDocuments({
        blogId: pageInfo.blogid,
      });
      const rows = await messageModel
        .find({ blogId: pageInfo.blogid })
        .skip((pageInfo.page - 1) * pageInfo.limit)
        .limit(pageInfo.limit)
        .sort("createDate");
      return {
        rows,
        total,
      };
    }
  } else {
    // 获取留言
    const total = await messageModel.countDocuments({ blogId: null });
    const rows = await messageModel
      .find({ blogId: null })
      .skip((pageInfo.page - 1) * pageInfo.limit)
      .limit(pageInfo.limit)
      .sort("createDate");
    return {
      total,
      rows,
    };
  }
};

//根据id获取留言或者评论
module.exports.findMessageByIdDao = async function (id) {
  return await messageModel.findOne({ _id: id });
};
// 删除留言或者评论
module.exports.deleteMessageDao = async function (id) {
  return await messageModel.deleteOne({ _id: id });
};
// 删除评论（传入的 id 是 message 表中的 blogId）
module.exports.deleteMessageByBlogIdDao = async function (blogId) {
  return await messageModel.deleteOne({ blogId });
};
// 查询24H的留言数量
module.exports.findDayNumOfMessageDao = async function (ip, date) {
  const nextDay = new Date(date);
  nextDay.setDate(nextDay.getDate() + 1); // 设置为下一天的日期
  return await messageModel.countDocuments({
    createDate: {
      $gt: date, // 大于等于当天
      $lt: nextDay, // 但小于第二天
    },
    ip,
  });
};
//分页获取博客楼层留了言
module.exports.findBlogsCommentByPageDao = async (pageInfo) => {
  //查询newMessageModel.UserComment下的集合所有itemArticleComment中的元素数量之和
  let total = await newMessageModel.UserComment.aggregate([
    {
      $unwind: "$itemArticleComment",
    },
    {
      $group: {
        _id: null, // 使用 null 表示不分组，即计算所有文档的总和
        total: { $sum: 1},
      },
    },
  ]);
  const rows = await newMessageModel.UserComment.aggregate([
    {
      $unwind: "$itemArticleComment",
    },
    {
      $project: {
        itemArticleComment: 1, 
        articleId: 1,
      },
    },
    {
      $skip:(pageInfo.page - 1) * pageInfo.limit
    },
    {
      $limit:+pageInfo.limit
    }
    
  ])
  return {
    total:total[0]?.total || "0",
    rows
  };
};
//删除博客楼层留言
module.exports.delBlogsCommentDao = async function(data){
   const Info = await newMessageModel.UserComment.findOne({ articleId:data.articleId });
   newInfo = Info.itemArticleComment.filter(item => item._id != data.itemArticleComment._id);
   await newMessageModel.UserComment.updateOne(
    { articleId: data.articleId },
    { itemArticleComment: newInfo }
   )
}
//删除博客楼层留言下的评论
module.exports.delReplyComentDao = async function(data){
  await newMessageModel.OtherComment.deleteMany({ articleId:data.articleId });
  await newMessageModel.AdminComment.deleteMany({ celId:data.itemArticleComment._Id });
}
